#ifndef BST_H
#define BST_H

#include <vector>
#include <stdexcept>
using namespace std;

template <typename T>
class TreeNode
{
  T element;
  TreeNode<T> *left = NULL;
  TreeNode<T> *right = NULL:

  TreeNode(T element)
  {
    this->element = element;
    left = NULL;
    right = NULL;
  }
};

template <typename T>
class BST
{
  public:
    BST();
    BST(T elements[], int arrarySize);
    BST(BST<T> &tree);
    ~BST();
    void inorder() const;
    void preorder() const;
    void postorder() const;

  protected:
    TreeNode<T> *root;
    int size;

}




#endif
